# 使用第三方原生解密模块：Crypto
import re

from Crypto.Cipher import AES
from requests_html import HTMLSession
from urllib.parse import quote
# 导入json模块提取数据
import json
import time

# 创建请求对象
session = HTMLSession()


class JZSpider(object):

    def __init__(self):
        # 用户输入
        self.user_input = input('请输入你需要搜索的地方：')
        # 请求地址(需要翻页和搜索名字，删除最后的参数仍然能获取相同密文)
        self.start_url = 'https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list?complexname={}&pg={}&pgsz=15'
        # 请求头(无痕浏览仍可获得响应数据，只需要ua)
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
        }
        self.key = 'jo8j9wGw%6HbxfFn'
        self.iv = '0123456789ABCDEF'

    def parse_start_url(self):
        # 将用户输入进行转码
        quote_str = quote(self.user_input)
        # 模拟翻页
        for page in range(5):
            # 完成地址拼接
            url = self.start_url.format(quote_str, page)
            # 发送请求，获取响应
            response = session.get(url, headers=self.headers).content.decode()
            # print(response)
            start = time.time()
            print(f'——————正在采集全国建筑市场{self.user_input}地区第{page + 1}页数据——————')
            self.parse_response_data(response)
            end = time.time() - start
            print(f'——————全国建筑市场{self.user_input}地区第{page + 1}页数据采集完成，用时{"%.2f" % end}秒——————')
            break

    def parse_response_data(self, response):
        # 使用第三方库：crypto进行解密
        # 需要先加密
        ciphertext = bytes.fromhex(response)
        # 模拟源码812和813行对key和iv进行utf-8编码，所以先初始化密钥和偏移量
        key = self.key.encode('utf-8')
        iv = self.iv.encode('utf-8')
        # 创建AES解密对象（密钥，加密模式，偏移量）
        aes = AES.new(key, AES.MODE_CBC, iv)
        result = aes.decrypt(ciphertext).decode('utf-8')
        # 有不明编码错误，用正则表达式提取所需信息
        r = re.findall('\[(.*)]', result)
        print(r, '\n', type(r), '\n\n\n')
        r1 = r[0]
        print(r1, type(r1), '\n\n\n')
        r2 = re.findall(',')
        print(r2, type(r2), '\n\n\n')


            # json_data_list = i2.replace("'", "").split(' ')
            # print(json_data_list, '\n', type(json_data_list), '\n\n\n')
                # for data in json_data_list:
                #     # print(data)
                #     # 提取id
                #     qy_id = data['QY_ID']
                #     # 提取统一社会信用代码
                #     code = data['QY_ORG_CODE']
                #     # 提取企业名称
                #     qy_name = data['QY_NAME']
                #     # 提取企业法定代表人
                #     fr_name = data['QY_FR_NAME']
                #     # 提取注册属地
                #     region = data['QY_REGION_NAME']
                #
                # # 构造数据对象整理数据
                #     item = {
                #         'id': qy_id,
                #         '统一社会信用代码': code,
                #         '企业名称': qy_name,
                #         '企业法定代表人': fr_name,
                #         '注册属地': region
                #     }
                #     self.parse_save_data(item)

    def parse_save_data(self, item):
        with open('全国建筑市场企业数据采集.txt', 'a', encoding='utf-8')as f:
            f.write(f'{item}')
            f.write('\n')


# if __name__ == '__main__':
#     r = JZSpider()
#     r.parse_start_url()